﻿using System;
using System.Collections.Generic;
using System.Text;
using Galaxy.ModuleInterface.Messages.Source;
using Galaxy.ModuleInterface.Messages.Destination;
using System.Runtime.Serialization;

namespace Galaxy.ModuleInterface.Messages
{
    /// <summary>Текстовое сообщение</summary>
    [Serializable]
    public class CTextMessage : CTypedMessage<string>, IGalaxyModuleMessage, ISerializable
    {
        /// <summary>Текстовое сообщение</summary>
        /// <param name="Data">Данные</param>
        /// <param name="Source">Источник сообщения</param>
        public CTextMessage(string Data, IGalaxyModule Source)
            : base(Data, Source) { }

        /// <summary>Текстовое сообщение</summary>
        /// <param name="Data">Данные</param>
        /// <param name="Source">Источник сообщения</param>
        public CTextMessage(string Data, string Source)
            : base(Data, Source) { }

        /// <summary>Текстовое сообщение</summary>
        /// <param name="Data">Данные</param>
        /// <param name="Source">Источник сообщения</param>
        /// <param name="Distination">Место назначения</param>
        public CTextMessage(string Data, IGalaxyModule Source,
            params IGalaxyModule[] Distination)
            : base(Data, Source, Distination) { }

        /// <summary>Текстовое сообщение</summary>
        /// <param name="Data">Данные</param>
        /// <param name="Source">Источник сообщения</param>
        /// <param name="Distination">Место назначения</param>
        public CTextMessage(string Data, string Source,
            params IGalaxyModule[] Distination)
            : base(Data, Source, Distination) { }

        /// <summary>Текстовое сообщение</summary>
        /// <param name="Data">Данные</param>
        /// <param name="Source">Источник сообщения</param>
        /// <param name="Distination">Место назначения</param>
        public CTextMessage(string Data, IGalaxyModule Source,
            params string[] Distination)
            : base(Data, Source, Distination) { }

        /// <summary>Текстовое сообщение</summary>
        /// <param name="Data">Данные</param>
        /// <param name="Source">Источник сообщения</param>
        /// <param name="Distination">Место назначения</param>
        public CTextMessage(string Data, string Source, params string[] Distination)
            : base(Data, Source, Distination) { }

        /// <summary>Текстовое сообщение</summary>
        /// <param name="Data">Данные</param>
        /// <param name="Source">Источник сообщения</param>
        /// <param name="Distination">Место назначения</param>
        public CTextMessage(string Data, ISource Source, IDestination Distination)
            : base(Data, Source, Distination) { }

        protected CTextMessage(SerializationInfo info, StreamingContext context)
            :base(info, context)
        {
            Data = info.GetString("StringData");
        }

        #region ISerializable Members

        public override void GetObjectData(SerializationInfo info, StreamingContext context)
        {
            base.GetObjectData(info, context);
            info.AddValue("StringData", Data);
        }

        #endregion
    }
}
